//2025年4月8日17:38:48 该递归文件的操作已经完成
#include"func.h"
void findfile(int deep,const char* path);
int main(int argc,char *argv[]){
    //先传入需要查找的目录
    ARGS_CHECK(argc,2);
    //表示递归深度
    int deep = 0;
    //调用递归函数进行寻找
    findfile(deep,argv[1]);
}

//为何不需要递归出口，因为while这里不管怎么样都会移动到NULL位置，一定会停止的
//这里的递归参数是递归深度和下一个需要访问的目录路径，目录路径需要使用sprintf进行拼接
void findfile(int deep,const char* path){
    DIR *dir = opendir(path);
    if(dir == NULL){
        fprintf(stderr,"error in opendir\n");
        return;
    }
    //用来指示当前的一个结构体指针
    struct dirent *tmp;
    //开始遍历所有的文件，会产生一个目录流，会自动移动指针，所以不需要操控指针往后移动
    while((tmp=readdir(dir))!=NULL){
        //如果是.或者..
        if(strcmp(tmp->d_name,".")==0 || strcmp(tmp->d_name,"..")==0){
            //不打印. ..
            continue;
        }

        //打印缩进
        for(int i=0;i<deep;i++){
            printf("——");
        }
        puts(tmp->d_name);

        //如果是一个目录文件
        if(tmp->d_type==4){
            char filepath[1024];
            //在这里传递路径时，需要一些处理才行
            //为什么要进行拼接字符串，因为在当前目录下面的目录，目录名就是路径名，但是其他
            //目录下，就需要拼接字符串进行使用了
            sprintf(filepath,"%s/%s",path,tmp->d_name);
            findfile(deep+1,filepath);
        }
    }
    closedir(dir);
}
